package masterclient;

import Protocol.ClientObject;
import Protocol.ComProtocol;
import Protocol.ReturnObject;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.security.MessageDigest;
import javax.swing.*;

/**
 * In deze klasse wordt een dialoog aangemaakt voor het wijzigen van een account
 * @author Erik Uitenbroek, Michael Stevens
 * @since 28-05-2012
 */
public class DialoogAccountEdit extends JDialog implements ActionListener{
    private Masterclient mc;
    private ComProtocol cp;
    
    //Variabelen van DialoogAccountEdit
    private JPanel panel;
    private JLabel labelAccountText = new JLabel("Account name: ");
    private JLabel labelAccountName;
    private JLabel labelName = new JLabel("Username");
    private JLabel labelPassword = new JLabel("Password");
    private JLabel labelRank = new JLabel("Rank");
    private JTextField fieldName;
    private JPasswordField fieldPassword;
    private JButton buttonSave = new JButton("Save");
    private JComboBox jCombo;
    private int index;
    private String pass;
    
    //Constructor
    public DialoogAccountEdit(Masterclient mc, int index){
        this.mc = mc;
        this.index = index;
        //Standaard schermgegevens aanmaken
        setTitle("Edit account");
        setSize(320, 275);
        setBackground(Color.WHITE);
        setVisible(false);
        setResizable(false);
        
        buttonSave.addActionListener(this);
        //Toevoegen van de velden etc.
        createScreen();
    }
    
   /**
    * Methode om het scherm aan te maken
    * @author Erik uitenbroek
    * @since 28-05-2011
    */
    public void createScreen(){
        //Eerst wordt een nieuw Jpanel aangemaakt, deze is zonder layout, alles wordt dus met coordinaten geplaatst
        panel = new JPanel();
        panel.setLayout(null);
        
        //Toevogen labelAccounttext
        labelAccountText.setBounds(10, 20, 100, 20);
        panel.add(labelAccountText);
        
        //Toevoegen labelAccountname
        labelAccountName = new JLabel(getData(index, "name"));
        labelAccountName.setBounds(120, 20, 100, 20);
        panel.add(labelAccountName);
        
        //Toevoegen labelName
        labelName.setBounds(10, 50, 70, 20);
        panel.add(labelName);
        
        //Toevoegen fieldName
        fieldName = new JTextField(getData(index, "name"));
        fieldName.setBounds(100, 50, 120, 20);
        panel.add(fieldName);
        
        //Toevoegen labelPassword
        labelPassword.setBounds(10, 80, 70, 20);
        panel.add(labelPassword);
        
        //Toevoegen fieldPassword
        fieldPassword = new JPasswordField(getData(index, "pass"));
        fieldPassword.setBounds(100, 80, 120, 20);
        panel.add(fieldPassword);
        pass = getData(index, "pass");
        //Toevoegen labelRank
        labelRank.setBounds(10, 110, 120, 20);
        panel.add(labelRank);
        
        jCombo = new JComboBox(fillList());        
        jCombo.setBounds(100, 110, 70, 20);
        add(jCombo);
        
        //Toevoegen dropdownmenu
        //dropdownmenu.setBounds(100,110, 120, 20);
        //panel.add(dropdownmenu);
        
        //Toevogen create button
        buttonSave.setBounds(10, 140, 75, 20);
        panel.add(buttonSave);
        
        //Zorgt ervoor dat het panel toegevoegd wordt aan het scherm
        add(panel);        
    }
    
    /**
    * Deze methode kijkt naar de isMaster status van het account en zet adh daarvan Master of Normal bovenaan in de lijst
    * voor rank
    * @author Michael Stevens
    * @returns String[] met lijst data
    * @since 30-05-2012
    */
    public String[] fillList(){
        String[] s = new String[2];
        if(mc.getUser().getData()[index][3].equals("1")){
            s[0] = "Master";
            s[1] = "Normal";
        }else {
            s[0] = "Normal";
            s[1] = "Master";
        }
        
        return s;
    }
    
    /**
    * Methode om de juiste int terug te geven voor isMaster (1 = master account)
    * @author Michael Stevens
    * @returns int met isMaster
    * @since 30-05-2011
    */
    public int isMaster(){
        int m;
        String s = jCombo.getSelectedItem().toString();
        if(s.equals("Master")){
            m = 1;
        }else{
            m = 0;
        }
        return m;
    }
    
    /**
    * Deze mehtode haalt de data op adhv gegeven type (name of pass)
    * @author Michael Stevens
    * @returns String met data
    * @since 30-05-2012
    */
    public String getData(int index, String type){
        String s = "";
        if(type.equals("name")){
            s = mc.getUser().getData()[index][1].toString();
        }else if(type.equals("pass")){
            s = mc.getUser().getData()[index][2].toString();
        }        
        return s;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource().equals(buttonSave)){
            String qpass = "";
            if(fieldPassword.getText().equals(pass)){
                qpass = pass;
            }else{
                qpass = mc.getUser().encrypt(fieldPassword.getText());
            }
            
            mc.getUser().updateUser(index, fieldName.getText(), qpass, isMaster());
            setVisible(false);
        }
    }  
    
}
